package com.xaicode.auth.config.redisson;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

@Data
@Configuration
@ConfigurationProperties(prefix = "spring.redisson")
public class RedissonProperties {

    // ---- 通用配置 ----

    /**
     * 当前处理核数量 * 2
     */
    private int thread = 2;
    /**
     * 从节点发布和订阅连接的最小空闲连接数
     */
    private int subscriptionConnectionMinimumIdleSize = 2;
    /**
     * 从节点发布和订阅连接池大小
     */
    private int subscriptionConnectionPoolSize = 10;
    /**
     * 单个连接最大订阅数量
     */
    private int subscriptionsPerConnection = 5;
    /**
     * 连接空闲超时，单位：毫秒
     **/
    private int idleConnectionTimeout = 10000;
    /**
     * 客户端连接名称
     */
    private String clientName = null;
    /**
     * 命令失败重试次数
     */
    private int retryAttempts = 5;
    /**
     * 命令重试发送时间间隔，单位：毫秒
     */
    private int retryInterval = 600;
    /**
     * 命令等待超时，单位：毫秒
     */
    private int timeout = 3000;
    /**
     * 连接超时，单位：毫秒
     */
    private int connectTimeout = 10000;

    /**
     * 密码
     */
    private String password = null;


    // ---- 单节点配置 ----

    /**
     * 单节点地址
     * redis://10.5.5.210:6379
     */
    private String address;
    /**
     * 单节点时生效，数据库编号
     */
    private int database = 0;
    /**
     * 单节点时生效，连接最大数
     */
    private int connectionPoolSize = 100;
    /**
     * 单节点时生效，发布和订阅连接的最小空闲连接数
     */
    private int connectionMinimumIdleSize = 10;
    /**
     * 单节点时生效，DNS监测时间间隔，单位：毫秒
     **/
    private int dnsMonitoringInterval = 5000;


    // ---- 集群配置 ----

    /**
     * 集群地址
     * redis://10.5.5.210:6379,redis://10.5.5.45:6379,redis://10.5.5.213:6379,redis://10.5.5.212:6379,redis://10.5.5.46:6379,redis://10.5.5.211:6379,redis://10.5.5.209:6379,redis://10.5.5.214:6379,redis://10.5.5.215:6379
     */
    private String clusterNodeAddress;
    /**
     * 集群扫描间隔（毫秒）
     */
    private int clusterScanInterval = 5000;
    /**
     * 主节点连接池大小，默认值64
     */
    private int masterConnectionPoolSize = 10;
    /**
     * 主节点最小空闲连接数，默认值32
     */
    private int masterConnectionMinimumIdleSize = 1;
    /**
     * 从节点连接池大小，默认值64
     */
    private int slaveConnectionPoolSize = 10;
    /**
     * 从节点最小空闲连接数，默认值32
     */
    private int slaveConnectionMinimumIdleSize = 1;


    // ---- SSL配置 - 未启用 ----

    /**
     * 启用SSL终端识别 默认值：true 开启SSL终端识别能力。
     */
    private Boolean sslEnableEndpointIdentification = true;
    /**
     * SSL实现方式 默认值：JDK  确定采用哪种方式（JDK或OPENSSL）来实现SSL连接。
     */
    private String sslProvider = "JDK";
    /**
     * SSL信任证书库路径 默认值：null 指定SSL信任证书库的路径。
     */
    private String sslTruststore;
    /**
     * SSL信任证书库密码 默认值：null 指定SSL信任证书库的密码。
     */
    private String sslTruststorePassword;
    /**
     * SSL钥匙库路径 默认值：null 指定SSL钥匙库的路径。
     */
    private String sslKeystore;
    /**
     * SSL钥匙库密码 默认值：null 指定SSL钥匙库的密码。
     */
    private String sslKeystorePassword;

}
